package continuity;

/**
 * Zetor csapat proto
 * 
 * A program célja hogy a modellről eldönthető legyen, hogy a feladat egy helyes
 * megoldását nyújtja.
 * 
 * @author Balogh Peter Tamas
 * @author Gál István László
 * @author Kárász Gábor
 * @author Simon Endre András
 * @author Szabó Alex
 */
import java.util.ArrayList;

public class Game {
    private Clock clock;
    private ArrayList<Level> level;
    private SpriteFactory factory;
    private Character character;
    private Character character2;
    private Level actualLevel;
    private int view;
    // változók
    // ClassName - osztály neve, osztályszintű változó
    // name - objektum neve
    static public String className = "Game";
    public String name;
    
    // a protonak visszaadja az orat
    public Clock getClock() { return clock; }
    //a protonak adja vissza a factoryt;
    public SpriteFactory getFactory() {return factory;}
    //karakterek megszerzése
    public Character getCharacter() {return character;}
    public Character getCharacter2() {return character2;}
    //karakterek beallitasa
    public void setCharacter(Character c) {
        character = c;
    }
    public void setCharacter2(Character c) {
        character2 = c;
    }
    
    public Level getActualLevel() {return actualLevel;}
    // A konstruktorok kaptak egy segítő paramétert,
    // az objektum elnevezésének megkönnyítésére.
    public Game(String n) {
        level = new ArrayList<Level>();
        name = n;
        view=1;
        
        clock = new Clock(this, "clock");
        factory = new SpriteFactory(this, character, "factory");
        changeView(view);
        
        
    }
   

    // játék újraindítása
    public void restartGame() {
        String classInfo = "Game::RestartGame(): void";
    }

    // Óra eseménykezelő
    // feladata hogy eljuttassa az óraütéseket a megfelelő
    // objektumoknak.
    public void Tick() {
        //meghivjuk a Tick metodust minden tickelhetore 
        if(character != null) {
            character.Tick();
        }
        if(character2 != null) {
            character2.Tick();
        }
        if(actualLevel != null) {
            actualLevel.Tick();            
        }

    }
    // elindítja a játékot és létrehozza a szükséges
    // objektumokat ( pálya, pályaelemek, karakter, fal, 
    // kulcs, ajtó).

    public void startGame() {
        String classInfo = name + "(" + className + ")::startGame(): void";
        loadGame();
    }

    // start előtti objektumok betöltése (pl. Clock, SpriteFactory) 
    public void loadGame() {


    }
    //palya hozzaadas
    public void addLevel(Level l) {
        level.add(l);
        //ha meg nem volt palya hozzadva, ez lesz az aktualis
        if(actualLevel == null) actualLevel = l;
    }
    // a konstruktor feladatát látja el
    public void init() {
        String classInfo = "Game::init(): void";
    }
    // játék állásának mentése

    public void saveGame() {
        String classInfo = name + "(" + className + ")::saveGame(): void";
    }

    public void nextLevel() {
    }

    public void winGame() {
    }

    public void changeView(int view) {
        this.view=view;
    }

    public int getView() {
        String classInfo = name + "(" + className + ")::getView: int";
        return view;
    }

    public void openMenu() {
    }

    public void closeMenu() {
    }

    public void showCredits() {
    }

    public void move(int dir) {
    }
}
